<?php

namespace app\api\controller;
use think\Controller;
use think\Db;

class Upload extends Base
{
    public function __construct(){
        parent::__construct();
        $this->user=session('user');
    }
    //上传图片
    public function upload()
    {
        // 获取表单上传文件
        $file = request()->file('file');

        if(empty($file)){
            return result(500,'上传文件不能为空！');
        }
        // 移动到框架应用根目录/public/uploads/ 目录下
        $info = $file->validate(['size'=>1024*1024,'ext'=>'jpg,jpeg,png,gif'])->move(ROOT_PATH . 'public' . DS . 'upload');
        if($info){
//            echo $info->getFilename();  echo $info->getExtension();
            $url='/upload/'.$info->getSaveName();
            $fileInfo=$info->getInfo();

            $data=[
                'url'=>$url,
                'name'=>$info->getFilename(),
                'size'=>$fileInfo['size'],
                'type'=>$fileInfo['type'],
                'owner'=>$this->user['id'],
            ];
            Db::name('imgs_user')->insertGetId($data);

            return result(200,'上传成功',$data);
        }else{
            // 上传失败获取错误信息
            return result(500,$file->getError());
        }
    }
    //上传Base64文件数据
    public function uploadBase64()
    {
        $base64=input('imgData');

        $base64_image = str_replace(' ', '+', $base64);
        if(strlen($base64_image)/1024>1024)
        {
            return result(500,'图片大小不能超过1M！');
        }
        //post的数据里面，加号会被替换为空格，需要重新替换回来，如果不是post的数据，则注释掉这一行
        $result='';
        try{
            $is_result=preg_match('/^(data:\s*image\/(\w+);base64,)/', $base64_image, $result);
        }catch (\Exception $e){
            return result(500,'图片base64数据有误！');
        }

        if ($is_result){

            $type=$result[2];
            if(!in_array(strtolower($type),['jpg','jpeg','png','gif']) ){
                return result(500,'上传格式有误，！');
            }

            //匹配成功
            $image_name = md5( uniqid().rand(10000000,99999999)).'.'.$type;
            $img_path="/upload/base64/{$image_name}";

            $pathDir=ROOT_PATH.'public/upload/base64'; //文件夹路径
            if(!is_dir($pathDir)){
                mkdir($pathDir,0777,true);
            }
            $image_file =  ROOT_PATH."public".$img_path;
            //服务器文件存储路径
            if (file_put_contents($image_file, base64_decode(str_replace($result[1], '', $base64_image)))){
                return result(200,'上传成功！',['src'=>$img_path]);
            }else{
                return result(500,'上传失败！');
            }
        }else{
            return result(500,'图片base64数据有误！');
        }

    }
}